Photogrammetry 完全指南
Vlad Kuzmin 分享了很多摄影测量的技巧。学习如何扫描真实世界的物体,清理和渲染。.
原文地址 https://80.lv/articles/full-photogrammetry-guide-for-3d-artists/
本文为有道翻译+人工修改,有些地方可能翻译不准确,请大家及时在评论里反映。
Vlad Kuzmin 分享了很多摄影测量的技巧。学习如何扫描真实世界的物体,清理和渲染。.
–
–
指定计划
一个好的摄影测量的成功取决于正确的计划。这意味着不仅仅是充满电的相机电池和相机三脚架。而且不只是良好的阴天或合适的工作室扫描设置。在你开始疯狂拍摄之前,首先你需要估计一下你的目标是如何拍摄的。如果你在室外拍摄,你需要检查你的物体,光线条件和物体周围的可用路径。
在你计划拍摄的物体周围有足够的移动空间是很好的。你应该在物体周围有 3 到 5 米的可用空间,为了拍摄特写镜头,你需要达到至少比物体高 50cm(物体高度为 3 米)。
预习
良好的扫描练习:在物体周围至少有一个每 10 度的增量(大概一圈能拍 36 张图),整个物体要包含在图像中。为了获得更好的结果,您可以从不同的角度创建更多的循环(一圈)。这些图像给摄影测量软件一个“基本框架”。这个“框架”将被用于更近距离拍摄的对齐和深度计算。
接下来就是中距离和近距离镜头:如果第一个距离在 3 米以外的物体,中距离是 1.5 米,近距离是 50 厘米。中距离镜头要衔接上近距离和远距离。
在远距离图像中,一枚硬币看起来像一个点,在近距离图像中,硬币是清晰的细节。特征(连接点)检测算法不能识别一个图像中的点和其他图像中的一个大硬币。这就是为什么中间步骤是必要的。
在中距和近距镜头,我们需要记住所有的表面。扫描对象的每边都需要拍摄:背后,上面,较低的,内侧,等等,每一个点的每个表面都需要至少 2 – 3 个图片,一个正对的和两个轻微的偏 10°-15°。
我看过很多由爱好者拍摄的照片,他们的膝盖、腋下、椅子的底部、桌子的底部、屋顶的底部,甚至雕塑的顶部(很常见的问题)都被完全遗忘了。
不要忘记适当的重叠:每个镜头都需要与下一个镜头重叠至少 60%(80%以上甚至更好)。
好的摄影测量三维扫描需要多少张图片? A post with advice on taking images for photogrammetry scan.
避免全景拍摄(相机停留在三脚架上,而你只旋转相机)。摄影测量软件可以看到一个全景图像。这样的图像没有视差的变化,因此没有深度信息来计算网格的细节。或者软件不能正确地对齐这些图像。
当你有一个关于物体的基本计划并且已经知道需要额外注意的物体的部分时,你就可以开始拍摄了。
拍摄,小侧步,拍摄,小侧步,拍摄…完成循环后,举起相机,开始下一个循环等等。
在一些光照条件下,例如,一个洞穴中的物体和一个比其他颜色更深的物体,最好使用其他的技术。从下面拍摄,再将摄像机向上移动,以此类推。在那之后,做一个小的台阶,重复垂直运动,但从上到下。从下面到顶部。
如果你是这样拍摄的,你可以调整相机的设置,这样物体的任何背光的一面都不会曝光不足,光线也不会曝光过度。在此过程中,您应该避免在相机上更改 ISO 设置。具有不同 ISO 设置的图像往往有不同的“噪点模式”或噪点等级。不同 ISO 的图像需要分别进行预处理。
你应该始终遵循物体的形状和曲线。拍摄需要是正对着,或者仅仅是与表面的一个轻微的角度。
当你知道你有所有必要的图像,比如雕塑头的顶部,背面,向下看的表面等等,现在是最后的“绝杀”镜头的时候了。这些可以是最复杂的表面的随机照片,或者是脸部、眼睛、耳朵、手掌等精细细节的表面,这样做是为了确保我们没有遗忘任何东西。
我们需要记住,图像需要尽可能的清晰。此外,场地的深度需要尽可能大。如果你使用的是单反相机或无反光镜相机,你应该已经知道如何实现这一点。
你甚至可以使用一部好的智能手机。iPhone 有一个很好的摄像头,可以用于高分辨率的摄影测量和亚毫米分辨率。只有获得良好的纹理是后处理中更困难的一步。
我知道从 40-90 张图片中得到好的结果总是很棒的,你会从更多的图片中得到更好的结果。如果你使用智能手机,你可以使用 300-500 张照片或两倍以上的相机。少数图像不是我们的选择。拍完所有必要的照片后,是时候回到办公室了。
删除旋转标签
几乎所有的照片编辑软件都会根据你使用的相机旋转自动旋转图像。你会在屏幕上看到“正确的方式”。
通常,对于现代摄影测量软件来说,旋转图片不是一个问题,但垂直用相机拍摄的照片可以旋转 90°和 270°,被视为不同的透镜组,并不总是可取的。
这就是为什么通过使用 ExifTool 或 ExiftoolGui 来删除摄像机旋转 EXIF 标记是明智的。
exiftool –Orientation=1 -n image.ext 或
exiftool –Orientation=1 –n *
对于批处理,从选定文件夹中的所有图像中删除此标记。
如果你的专用相机只用于摄影测量,你可以在相机设置中禁用图像旋转。
预处理
如果我告诉您任何预处理的数据集总是比未处理的要好呢?嗯,你的相机很好,你的照片在 Instagram 上看起来很棒。是的,可以用原生的 iPhone 相机应用程序拍摄并进行适当的扫描。但是,最好是在原始的和预处理的图像中进行拍摄,以获得更好的对齐、网格和纹理。
人类的眼睛比任何摄影测量软件都能看到更多的细节。这就是为什么我们需要应用预处理-我们将帮助摄影测量软件识别细节,特别是在阴影和照明区域。
我个人的偏好是在 Adobe Photoshop 中使用 CameraRAW。Lightroom、DxO Optics,、Affinity Photo 或其他免费或付费的图像处理工具也可以使用。我们需要修复曝光,减轻阴影部分,使照明区域变暗。我们也可以去掉色差。去除噪点并锐化图像。但是要小心,因为图像不能以任何方式被扭曲。
纠正镜头扭曲是严格禁止的!图像处理工具的校正并不是摄影测量的校正。你需要强行取消相机、Lightroom、DxO 或其他你使用的照片编辑软件的镜头畸变校正。否则,您将会损坏执行正确的摄影测量过程所需的数据。
对于大多数户外扫描,我使用这些设置。是的,他们是强大的
曝光: 从 +0.0 到 +1.5
(取决于光照条件。通常情况下,图像会被曝光不足。)
Lights: 从 -50 到 -100
Shadows: 从 +50 到 +100
Lights: 从 -50 到 -100
Blacks: 从 +20 到 +100
你可以添加更多的细节对比清晰,抖动,和 Dehaze(除雾)…低 ISO 图像,默认的降噪和锐化就足够了。但是“细节”设置最好设置为零。
我更喜欢通过 Adobe Photoshop 进行批处理图像处理,并使用动作脚本与 CameraRAW 打开图像。该脚本可以运行一些额外的过滤器、操作或插件。我可以稍微调整一下每个数据集的脚本。
预处理的基本思想是在阴影和光线中增加细节的可视性,增强细微对比度。
注意:所有的过程都需要 16 位,并且输出 16 位 tiff/png。导出也可以是 8 位 JPG, 100%的质量。16 位就足够了(是的- 如果你知道数学和图像处理的基础知识,8 位 JPG 图像可以提供 16 位纹理)。
REALITYCAPTURE:
如果这个词让你感到害怕那我很抱歉,但是没有其他的摄影测量工具能替代RealityCapture.的能力。不仅因为它的速度快,而且与其他工具相比,更高的模型细节和很低的硬件要求。所有的计算,除了对齐相机 RealityCapture 使用 out of core。想象一个 30 亿的多边形网格在 16Gb 内存!这种能力也适用于非企业用户。
也许价格会有点高: 3 个月为 99 欧元(33 欧元/月)。但是在一些国家,这就像在餐馆吃饭一样(…………)。
其他竞争对手(同类软件)的成本就像喷气飞机,或者像糖蜜一样慢(-.- 小心得罪人)。
这就是为什么我要使用 RealityCapture,因为我想本周从扫描中获得所有可能的细节。
注意:即使 16Gb 内存足够,32Gb 的内存更适合工作。
– Dude, I don’t like cats!
– You just don’t know how cook them!
为什么 RealityCapture 会带来坏的结果的两个原因:
第一个原因——你不知道如何“烹饪”RealityCapture! (使用)
第二个原因——你不知道如何“拍摄”图像!
第二个是人们使用 RealityCapture 获取不良结果的主要原因。垃圾进,垃圾出!
如果你有一个好的数据集,结果应该是不可思议的。你可以用一部 iPhone 6 相机,在高度为 3 米的物体上达到 0.5 毫米的分辨率。
你可以在开发人员的网站上,或者在 SketchFab 博客上找到 RealityCapture 的基本工作流程。你也可以在应用程序本身找到更多的建议。帮助文档是最有好的,您可以很容易地找到对任何选定工具的解释。RealityCapture (RC)提供的是对所有摄影测量步骤的完全控制。默认设置足以从良好的数据集获得良好的结果。然而,不是完美的数据集需要一些微调,这可以通过为每个数据集裁剪必要的设置来实现。
REALITYCAPTURE—设置
缓存位置:
在默认情况下,RC 使用一个系统临时文件夹,用于所有临时文件(可以从 120-150Gb 到平均 12-24Mpx 图像数据集)。一旦项目中的文件被使用,或者您同时使用多个项目,最好将缓存位置设置为专用的大型 SSD (512Gb 或更多)或快速 HDD。RC 的 90%或所有操作 out of the core,所有临时文件都被写入到缓存目录中。这些临时文件可以在稍后的步骤中被 RealityCapture 重用,并且可以大大加快计算速度。我的建议是将缓存位置设置为另一个驱动器,例如,Z:/RC_TEMP。在此之后,需要重新加载 RC。
相机使用 EXIF 分组
没有理由不使用这个设置。启用分组可以帮助您避免错误的相机和镜头判断。RealityCapture 通过一个镜头组中的所有图像来计算这些参数。我强烈推荐这款“带主镜头相机”的转盘扫描。对于多摄像机设备来说,分组是不必要的。
有两种方法对图像进行分组。
1:选择 1D view 左上角的“Image”分支,在窗口上显示,按 group。
2: 在图像导入上启用分组。
图像重叠:
它定义了被拍摄的图像如何覆盖扫描对象。默认情况下,这将设置为 Medium。
如果数据集的所有图像至少有 70-80%的重叠与最近的图像重叠,则可以设置中重叠。这些重叠设置对大多数业余爱好者来说都是不好的,因为它需要 800-1000 张图片,在简单的形状之间没有空隙。如果您有一个小的数据集,它很可能会被分成许多组件(连接的和对齐的图像组)。这就是为什么在大多数情况下,低重叠是首选。
传感器灵敏度:
它定义了如何精细和有多少特性(物体的唯一位置)RC 将尝试检测。
例如:对于丰富的花岗岩纹理,你可以使用低灵敏度。对于微妙的白色大理石纹理,你将不得不使用高灵敏度。
超高灵敏度很少被使用。它可以用于工作室里的面部或身体扫描。最好不要设置比要求更高的灵敏度。
在一些 RC 窗口中,我建议启用控制台视图。它可以显示一些有用的信息,当我们需要联系支持或其他专家时,它可以提供帮助。
REALITYCAPTURE 工作流程
对齐
如果这是一个较老的工程,或者我们不确定分组的图像,我们可以点击左上角的“Images”,点击“Clear Calibration Groups”- Ungroup 和“Group Calibrations w.r.t. EXIF”-Group。
现在,当所有的图像都被 EXIF 分组时,改变图像重叠到低,并检查所需的检测器灵敏度。接下来,我们可以运行 alignment。根据图像的数量和大小,这可能需要几分钟。
当在 RC 中进行任何操作时,我们可以在 console 视图中看到:
如果我们使用默认设置,每个图像有 40000 个特征,在控制台视图中,我们看到一些图像的特征小于 40000 个,这通常指向图像质量的问题。稍后,我们可以确定这些图像没有正确对齐,丢失或出现问题的原因是在网格或纹理中。
我们还可以看到这个过程的详细时间报告。
如果我们正确地拍摄了数据集,99%或所有的图像都在第一步中对齐。由于图像的问题,只丢失了一些图像。不好的图像很可能是那些比我们在 console 视图中看到的更小的检测功能。如果我们在左窗口中看到不止一个组件,但是我们的数据集很好,那么 RealityCapture 可以将所有图像作为下一个步骤中的一个组件对齐。我们需要删除小的组件,只留下最大的,再对齐。
在这一点上,RC 将重复用第一步中检测到的特性(从缓存目录中存储的数据),优化主组件的摄像机位置,并为我们在第一个对齐步骤中使用的其他组件找到合适的位置。
如果必要的话,可以重复几次。即使是一个组件,RealityCapture 也会改进相机定位和镜头设置,从而提高质量。如果每次对齐后,您都可以看到相同数量的独立组件和相同的图像计数,这意味着我们需要使用手动控制点。
在 RC 中使用手动控制点和组件,是一个单独的任务。例如,这是用来扫描巨大的物体,比如建筑物和城堡,你可以扫描内部和外部。控制点工作流是一种单独的技术,它不适合本教程,因为它需要更多的时间来解释。
控制点(CP)工作流程的基本思想:
在一个小的组件中,创建大约 3-4 个控制点,通过从控制点窗口拖动到选定的图像,将它们至少放置在 3-4 个图像上。
为了细化它们的位置,点击一个放置的 CP,在保持这个点的同时,使用缩放轮,调整缩放级别,更精确地放置点,然后释放。
在至少 3 到 4 个图像上放置最大组件的相同控制点。
左右箭头键可用于在数据集中的图像之间切换。
在选定的 2D 视点的场景选项卡中启用 Residuals ,将显示当前 CP 到正确位置的线,由当前组件摄像机对齐估计。
一段由开发者制作的短片,展示了控制点的工作流程:
完成此操作后,删除小组件并再次运行对齐。如果在数据集中没有更多的错误,RC 将合并并对齐所有的摄像机与一个组件。如果您不再需要这些旧组件,您也可以删除它们。
现在,几乎所有的图像都对齐在一个组件中。我们终于可以改进相机的对齐方式。为此,我们可以对所有图像进行分组,并运行最终对齐。在这一步骤中,RC 将把所有的相机都当作不同的镜头来计算,并根据不同的变焦或传感器/镜头从光学稳定(如果你使用它)来调整小的偏差。
在此步骤中,我们可以减少最小的再投影误差。默认情况下是 2px。虽然对于大多数数据集来说,它已经足够好了,但我个人的偏好是将相机改进到至少 1px 的错误。把它设置得更低,将使平均值和中值误差更加精确。更少的错误-更好的网格,更好的网格-后面就更少的工作。
MESHING 构建模型
首先,我们需要通过定义一个地平面来对齐我们的扫描到地面。视图之间的切换可以通过键盘上的 4、6 和 2 个数字键来完成,也可以通过场景选项卡完成。接下来,我们需要定义重建区域。最好设置尽可能小,以适合扫描对象或扫描区域。
记得保存
接下来,我们可以运行正常或高模式的网格。如果您在正常的细节模式下有默认设置,RC 将计算从 2x 向下采样的图像的深度映射。高细节模式使用图像而不需要向下采样。RealityCapture 可以将细节重构到 0.25px,这意味着正常模式下的网格有时是足够的。如果你确信数据集是干净而清晰的,通过在高细节模式下进行网格划分,你会得到更多真实的细节。然而,这需要更多的时间。
对于一个测试,我们可以设置 4 x down-sample 正常模式的细节。这将给出足够的细节来对最终的网格质量进行高效的估计,并且将会很快完成(在适当的硬件上 5 – 10 百万网格需要 20 – 30 分钟)。
对于 PC 硬件来说,最大的压力是深度图的计算。此时,GPU、CPU 和 SSD/HDD 使用率可以达到 100%。并且由于系统不能控制 GPU 优先级,而这是在进行的同时,您将不能使用 PC(在夜间运行,特别是在高模式下运行时更好)。
永远别忘记保存!
你可以从这里几种不同的方式。许多用户选择将一个网格的数量减少到 1-1.5 百万多边形,并将其从 RC 直接上传至 SketchFab。但是,从任何摄影测量应用程序中,一个原始的、未被修改过的网格都是不完美的。这就是为什么我们需要修复原始网格。
SIMPLIFYING 简化模型
在高分辨率网格中,一个 500-700px 的图像网格的普通多边形数约为 100-200 百万多边形。可以肯定地说,我们不需要所有的这些。
从 16mln 的多边形,4K 材质可以将微细节存储在一个法线贴图上,8K 到大约需要 67 百万的多边形。为了得到最好的结果,16 百万多边形网格细节需要存储在 8K 法线贴图上。这意味着我们可以把一个原始的 100-200 百万多边形网格简化到 8-16 百万的多边形,没有任何问题。decimation 算法会保留这些锋利的细节,我们不需要担心这个。
为了导出网格,OBJ 是最通用的格式。
修复原始模型的错误拓扑 (旧方法)
如果您使用的是外部软件,如 ZBrush,您可以跳过这一步。
在原始网格中非常常见的问题是,从 decimation 步骤后或 T-顶点(零面积多边形)中出现的孔和 non-manifold 的边/顶点(交叉)。因为 RealityCapture 很少有 twisted 相交的多边形,所以我们只需要填充这些孔。为此,我们可以使用 MeshLab 或 MeshMixer。
在 MeshLab – Close Holes。在某些情况下,有两个多边形的洞,中间只有一个顶点,而 MeshLab 不能关闭这个孔。您将需要删除一个或两个多边形并再次运行该工具。为了消除 t 顶点,我们需要运行 tool «Remove T-vertices with edge flip»,值为 10-20。
在我们关闭所有的孔并固定所有的 t 顶点后,我们可以将网格导入到一个曲面雕刻 app 中,我个人喜好是 3d coat。这个应用程序可以使用不固定的网格,但是最好在导入之前修复拓扑错误。
这个应用程序对于 3D 扫描网格来说是非常棒的。与 ZBrush 相比,它有一个线性的工作流,工具是工具,对象是对象。使用简单,你不需要谷歌如何导入 OBJ 文件,并发现你的对象是一个工具,你需要一个工具来修复工具内的工具…
One important note: Because we have already fixed the mesh topology, we won’t have to import it as “repair scanned mesh”. This is usually slow and requires watertight meshes.
We need to only import the mesh for SURFACE Sculpting. (什么鬼)
另一件值得注意的事情是:3D-Coat 的体素雕刻令人惊叹。但是我们必须避免所有 Surface<->Voxel 转换和在 3D-Coat 中减面。该操作将通过一些快速筛选的泊松网格重建算法来破坏我们的所有微细节。
3D-Coat 在动态网格镶嵌上有巨大的优势(你可以有时也需要禁用)。它叫做“消除拉伸”。这将增加网格分辨率,只在你工作的区域。其他的网格部分保持不变。
当导入表面雕刻时,你会得到一个提示,告诉你你需要启用“import without voxelization”,respect negative volume 和保留旋转坐标。您将需要按自动缩放,并按下应用。
在此之后,另一个弹出对话框将显示,我们需要选择 Yes 来存储原始的缩放、旋转和 etch,它将在 3D 空间中存储原始的网格信息。这是不应该改变的,或者以后当我们将网格导入 RC 作为一个固定的网格时,它不会和原来的网格在同一个地方。
SCULPTING 雕刻
这是工作中最有创意的部分。3 d-coat 提供了一系列不同的工具。最常用的是填充、压平、冲、带 alphas 的笔刷,以及有无动态镶嵌。
3DCoat 网格雕刻基础:
Simple Brush – rise; Fill – fill pits or canals; Flat – flatten hills, etc.
When holding the CTRL button pressed, most tools are reversed.
Brush – dig; Fill – smooth flatten hills (fill them from the other side of the polygons); Flat – rise (careful with this), etc.
A special CTRL + SHIFT will switch any tool to Relax polygons. This works like smooth, is faster and does not increase the polygon density.
Another useful tool is the Tangent smooth tool. It can relax edges between big and small polygons but retain a shape of a surface.
We can fix big polygons with the “Draw” tool with default smooth “alpha”, set depth to 0.5 or less and enable “remove stretching”. Simply paint over the big polygons with or without CTRL and these will be subdivided. Next, select a “random” alpha and increase the depth up to 1 to add some noise similar to a correctly reconstructed surface.
If we have some shifted surface, we can fill the cracks with the Fill tool, or flatten it with CTRL + Fill. Or even smooth them with relaxation. After that, recover the original noise with “Draw” tool with alphas.
A video explaining the basics of how this works can be seen here:
修正的基本思想 :从弱表面的大多边形增加网格分辨率。解决定位错误。找回丢失的部分。在固定好形状后,添加一些与原始未接触表面类似的小噪点细节(以防你扫描的是有机或石头物体)。对于光滑的表面来说,噪点是不必要的,但是雕刻需要注意尖锐的边缘和平坦的表面。有时,您可以将被扫描的对象分割成多个部分,分别恢复各个部分,然后将其合并回去。
经过所有这些步骤,我们获得了一个“干净”的高分辨率网格。这需要作为 OBJ 导出。
QUALITY CHECK 检测质量
我们会检查我们干净的网格的质量。与最开始的原始模型一样,我们可以在 MeshLab 或 MeshMixer 中检查错误。检查相同的错误:孔、相交的多边形、t 形顶点以及在雕刻步骤中可能出现的更多错误。
然后导出干净的模型。
IMPORT BACK TO REALITYCAPTURE 导回进 REALITYCAPTURE
现在我们需要从 reconstruction 选项卡导入干净的模型到 RealityCapture。如果我们工作中仔细,干净的模型将被放置在原始模型的位置。如果模型在位置、方向或形状上有许多较大的差异,那么摄影测量软件将无法正确地计算纹理。
TEXTURING 生成贴图纹理
接下来的一步是将已清理的高分辨率网格进行纹理处理。在高度 2-3 米的物体中,产生 16k 的纹理分辨率是很好的,之后会被还原成最终的 4k 或 8k 纹理。
RC 有一个 16k 分辨率和 UV 展开的一个“maximal textures count”,导入模型默认是 16k 纹理分辨率。您首先需要检查这些设置。
对于提高贴图效果,我们需要将外环的照相机的纹理权重改为非常小的值。使用相机套索工具,选择这些外环相机,或选择所有中距离和近距离摄像机,并反转选择。在图像属性将重量改为 0.01(1%)或更少。
接下来,我们可以运行 Unwrap,然后是 Texturize。或者只是纹理化(如果模型没有 UV 贴图,它会自动打开)。在此步骤中,RC 使用 GPU,这样您的系统可能不会响应高的 GPU 负载。完成后,我们可以简单的导出干净、高分辨率的模型和纹理。
DECIMATION 抽取
如果我告诉你所有自动或半自动的 quad 重新拓扑工具都是坏的呢?
简单的低多边形拓扑规则:低多边形网格边缘需要尽可能地跟随高分辨率网格。但是凹陷的边, 眼状,尖锐的边缘,所有这些都是自动重新拓扑工具的问题。
当然,你可以用向导。这肯定会增加最后的低多边形网格质量。你使用的指导越多,完成工作所需的时间就越多。有时,太多的指导和方法会失败。在许多情况下,手动的重新拓扑比使用自动的方法更快地工作。
所有的实时引擎都使用三角形,如果我们不需要动画(morph)扫描,静态对象如石头,雕塑等,根本不需要四边面。我们使用 MeshLab 的 Quadric Edge Collapse Decimation ,将高模减成低模,抽取 50%,从 10 百万到 5 百万等等。
不要担心,因为这一步不需要太多的关注。在设置中设置 0.5,并按“OK
通过这种方法,我们将保留大部分细节,而不是简单地将 10 百万转换为 30k 多边形网格。或者通过任何四种自动重拓扑结构。
当大量使用 100-150k 多边形时,最好检查网格是否存在拓扑错误,如果存在的话,修复它们。如果你有高分辨率的模型,高分辨率模型上可以有小的桥梁或尖峰,当边缘坍塌时,这些可以形成自我交叉的多边形。这可能导致在最后的 decimation 步骤中出现问题。这在 MeshLab,MeshMixer 或者其他软件中很容易修复。100k 多边形网格不是一个需要处理的问题。模型的问题都修复完后,可以再抽取 50%,直到 50-75k,后面使用.
如果物体是一个简单的,均匀的扫描,像石头,并且它没有我们想要保存的部分,我们可以将它抽取 1 到 2 次并且得到一个 10k-30k 多边形网格。如果我们的物体是一个雕像或一个底座,我们可以使用选择性抽取。
选择重要的细节部分:脸,手掌、手指…我们可以用粗糙的选框工具选择,和画笔为多边形选择工具选择。
在我们得到所有想要保留的部分后,我们可以应用选择反向。并且只对这些部分使用 50%的 decimate,只使用“Simplify only selected faces”选项。如果这是对一个基座上的雕像扫描,我们可以再次选择基座,并将其抽取 50%。你可以选择底部的底部,并再次将其删除,特别是如果在扫描中看不到的面。
我们应该对任何拓扑错误(包括 T 顶点)进行网格的最后检查。
UV
许多人喜欢四边形的一个主要原因是,循环边缘可以更快的展 UV。抽取过的模型都是三角面,但这不是问题。3D-Coat 非常适合扫描,不仅是因为动态细分。但是因为它有一个神奇的 UV Path 工具。可以“绘制”Path,并且它们的流可以很容易地调整。因此,我们在 3D-Coat 中打开低模 使用“UV map mesh”。
这里有一个视频解释了 UV Path 的工作原理:
另一个具有类似功能的软件是 Blender。它可以用来在两个选定的顶点之间“绘制”路径,但是它不允许像 3D-Coat 那样简单的调整。根据拓扑结构,UV 路径工具需要几分钟才能展开 UV。
有一个基本原则:在隐蔽的地方,凹陷里或在锋利的边缘处切割 UV。然后就是 UV 排布,这个就不多说了。(虽然我没用过 3D-Coat,但是我觉得 unfold3D 应该是最好的展 UV 工具。)
BAKING 烘焙
在这之后,我们需要准备我们的低模。对于大多数的扫描,这是一个更好的选项来设置所有的顶点或所有的多边形平滑,取决于所使用的 3D 软件。实时渲染引擎将处理整个网格平滑。这是最简单的方法,以避免稍后使用切线空间法线图( tangent space normal map)。
我推荐 xNormal。 (emmm…..我推荐 knald。GPU 的快得一批!)
它是免费的,与商业工具相比有许多优点。允许在高模或低模上设置多边形的平滑度。它不需要 4-8Gb 的 VRAM 来烘焙 8k 纹理。可以使用 CPU 和 RAM 来烘焙超高分辨率的模型和巨大的贴图。
打开 xNormal,通过拖拽到高分辨率网格窗口加载高模。设置“Average normals”。右击,选择“Base texture for bake”并添加纹理。
加载低模到 low-resolution meshes 窗口; 设置 “average normals“.
我们现在可以切换到 Tools 窗口并选择 ray distance calculator.。运行这将计算高低模的最小/最大距离。
如果我们在前面的步骤都是对的,我们应该期望的是非常小的数字,比如 0.05。
有时可能会出现很大的最大距离;这可能是由于一个或两个多边形的碰撞,或者高模上有 尖状物。在这种情况下,最好检查烘焙的纹理是否有错误。如果只有很小的错误,或者在 xNormal 中调整距离设置,然后再次烘焙,就可以在 Photoshop 中修复纹理。在我的大部分扫描中,我只在低模窗口设置了 0.1 的最小值和最大距离。
在此之后,我们可以选择烘焙设置,纹理大小,render basket 大小和抗锯齿设置。最好为法线和 base color 设置最大 4x 采样。
对于一个 AO 和 cavity,因为这些是不可见的,并且需要太多的计算时间,所以我们可以设置 1x 的值。
开启 Normal map 烘焙 (计算 tangent space)和 Base color。
在 xNormal 全局设置里, 你可以在不同的图像格式中选择 8/16/32 bits。我喜欢 16bit 的 tiff.
烘焙 Normal map 和 Base color maps
在此之后,在 Photoshop 中打开一个生成的法线贴图。检查所有的小细节,洞穴或多个小的元素,如手掌。如果我们设置错误的最小/最大距离,我们将不能看到连续的颜色。在这种情况下,需要调整最小/最大值设置。如果一切正常,下一步是删除 alpha 通道,并将最大压缩的图像保存为 PNG(无损,支持 16 位,比 ZIP tiff 更好压缩)。
为了在 SketchFab 或 Marmoset Viewer 中使用,最好将映射的图像向下采样到 4k(如果原始数据是 8k),保存一个 JPEG,以达到最大质量(在保存时图像将转换为 8bit)。
回到 xNormal,禁用 Normal map 和 Base color maps,启用 AO 和 cavity map。然后把 x4 换成 x1。接下来烘焙这些贴图。这个过程非常缓慢,所以你可以最小化 xNormal,并减少它在任务管理器中的优先级。
在 xNormal 完成烘焙 AO 和 cavity map 后,打开 Photoshop 中的 map,删除 alpha 通道,将 RGB 转换为灰度。
在小细节的地方重复检查错误。接下来,将它保存为 8k PNG 文件归档,然后保存 2k 或 1k 的用于 SketcFab 或 Marmoset(因为阴影的细节不需要高分辨率,并且加载速度更快)。并保存与最大质量 JPG。
BASE COLOR TEXTURE
如果你的镜头是正确的,并且你的相机是正确对齐的,那么纹理应该是非常好的,并且只需要在相机从一个高的角度捕捉到表面或者重建看不见的表面的地方。
这个目的最好的工具是在 Photoshop 中使用 Content-Aware Fill(内容感知填充)或 Patch(修补)工具。。这些可以让你复制并将图像的另一部分融合到我们想要修复和重建的部分。这个过程需要技术和艺术技巧,尤其注重细节。你需要找到类似的、良好的图像部分,可以作为源使用,并尽可能地)使用 UV 贴图变形。你需要记住,所有的 UV 块都有延伸的边界,需要适当的渲染。特写渲染的时候可以看到一个像素的黑边。或者在实时引擎中使用,低级 MIP-maps 可以使这样的边缘清晰可见。这就是为什么边界如此重要(需要 8px 甚至更大)。
对于恢复较大的区域,您可以使用 Content-Aware Fill(内容感知填充)或 Patch(修补)工具。
如果你需要恢复在 UV 块之间的纹理,这可能会造成一些问题。在这种情况下,您需要创建另一个临时的 UV,将边缘合并到一个 UV,并且你可以连续地“绘制”一个新的纹理。首先,将纹理从高分辨率复制到临时的 UV 布局,然后恢复部分。然后从临时的 UV 贴图到工作的 UV 贴图,将校正后的纹理烘焙出来。
你需要记住,所有新的纹理转换都删除了小细节。这就是为什么对临时 UV 贴图使用更高分辨率的原因。你甚至可以增加 UV 块的大小,你需要一个修复。并使用双尺寸分辨率- 16k 的临时贴图为 8k 工作贴图。
之后,将固定的和原始的纹理与图层和 masks 融合在一起,通过掩盖在临时贴图中未被触摸的所有区域。因为这主要是用 Photoshop(或另一种首选工具)完成的,我们不会在本教程中介绍它,但我希望您能理解这个基本概念。(看完似懂非懂…….)
ASIDE 旁白
你可能发现在高分辨率的网格上使用 8bit 的源图像和纹理,并将其烘焙到 16 位,有点奇怪。是的,你没看错。
如果你在预处理步骤中去除阴影和去光图像,那么 16 和 8bit 之间的区别仅仅是图像中 LSB 部分的噪点。这就是为什么我们可以使用 8bit 图像来贴图。
任何纹理生成或烘焙步骤都有亚像素的转换,特别是当我们从 16/32k 纹理到 8/4K 的时候。这一步将总是添加额外 bit,16 位足够。
在预处理步骤中,可能需要 16 位流程恢复阴影中的细节,我们不增加任何额外细节。
最有可能的是,由于这个工作流,我没有成功地使用 Unity Unlit 工具,因为纹理已经被去光,只需要小的技巧和颜色修正。任何颜色的纹理校正,最好在 16 位工作。
如果你知道如何更好地使用 16/32bit 流程,为什么要阅读本教程?
SKETCHFAB (后面关于上传 Sketchfab 的,就不翻译了,有兴趣的可以自行翻译)
At last, we have our low poly OBJ mesh.
For Sketchfab we’ll use 1-2K maps for the AO and cavity, 2-4K for normals and albedo (and if used 2-4K maps for specular/glossiness).
We can pack all files with 7zip (as a .zip or .7z archive) and upload them to SketchFab. Or simply pack the OBJ and MTL files, or only FBX mesh file. You can later add all the textures via the SketcFab 3D Editor.
A useful trick: If you want to upload a “scene” to SketchFab containing more than one object, you will need to export all meshes as OBJ and create an empty file sketchfab.zbrush, then upload as an archive. In such case, SketchFab will treat the separate objects as one scene file.
SKETCHFAB 3D EDITOR
I hope you have successfully added all the required materials to your model.
Normals from xNormal usually don’t require a Y-flip.
Ambient Occlusion looks better with “Occlude specularity” ON and at 80-90%. Cavity with 50%.
Next, we need to talk about the lights and background.
Because our scene is a 3D scan, the lights, environment, and background need to be selected wisely. We want to show a good picture or mood, but at the same time show the scanned object and all its details. Sometimes seeing a good scan is the only way for people around the world to see some unique objects or world heritage artifacts.
This means that the background should not clash with the hero of our story – scanned the object. The used lights need to contribute to the details of the object.
Light can be generated from an environment map and can create a shadow, so you don’t need to use additional light.
But If you can set up proper lights, your model will look very realistic.
I personally love the dark or light grey clean SketchFab background. But seeing interesting combinations of photos of scanned places and objects can look good too.
The Blurred Environment map as a background usually looks cheap and boring, and you’ll have to work on creating something better.
POST-PROCESSING
A post-process filter that can be used without causing problems on the scans is the Sharpen, and its default settings are usually enough.
SSAO (Screen space ambient occlusion) can look very interesting, but it is a bit strong for my taste. Also, as we have pre-baked AO and cavity, the additional SSAO effect is not needed.
I strongly recommend avoiding using DOF, aberrations, or other strong post-processing effects that can destroy the charm of a good scan.
To be honest: If you see any of these effects in combination with the Shadeless mode, this most likely means that the scan has gone bad or has a low quality, and the author needs to hide as much of it as possible.
The same goes for camera restrictions. In my opinion, if you don’t want to show all 360 degrees of the scanned object – simply use still renders or video.
Next, save the scene. This can take some time if we have added textures (they are needed to be uploaded).
Then exit to view mode.
Do not skip adding a nice description, and maybe some details regarding the used software and hardware like cameras, lens, number of images, etc.
Also, add tags with names of used software. This is helpful to other users that are searching photogrammetry tools and helps them understand the Pros and Cons of the modern photogrammetry software by browsing through the SketchFab.
Finally, Scale and Rotate the scene in the view window, and save the correct view with the left top Save View button.
Double check all the text, press Publish and wait for likes or maybe a Staff Pick .
RESOURCES 资源
如果你想了解更多关于 RealityCapture、photogrammetry 或 3Dscanning 的信息, 欢迎访问 Capturing Reality Forum.
或者在 Facebook 上找到更多这样的群组:
在这里你不仅可以找到我,还可以找到许多其他的摄影测量和 3D 扫描的专家,VFX 和 VR/AR。
一定要先搜索和阅读,因为你会发现很多有用的东西,而且大多数问题已经被问到和回答了。
ABOUT THE AUTHOR 关于作者
出生于苏联,列宁格勒(圣彼得堡),1970 年代。擅长设计,UI/UX 设计,广告,摄影测量,和 3d 视觉。认证的 Adobe ACE/ RealityCapture 和摄影测量专家。快速找到和混合不同的技术从不同的设计部门,以获得成功的最有效的方式。
在过去的 5 年里在日本生活和工作。曾在一家日本电子游戏公司担任 UI/UX 设计师。在过去的一年里,他把时间都花在了东京 Avatta 工作室(avatta.net)的摄影测量上。Avatta 的客户包括 Sega, Sony Computer Entertainment, NHK, Amazon Japan 等,公司拥有全国最好的全身和面部摄像设备。
译者及时更新,欢迎大家阅读后发表评论,以利作品的完善。属在本网站发表的文章,